package com.hpin.mlxteacher.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import android.widget.TextView;

import com.hpin.mlxteacher.R;


/**
 * 自定义进度拖动条控件
 */
public class MySeekBar extends SeekBar {
	/**
	 * 定义一个展现时间的PopupWindow
	 */
	private PopupWindow mPopupWindow;

	private View mView;
	/**
	 * 显示时间的TextView
	 */
	private TextView dialogSeekTime;
	/**
	 * 用来表示该组件在整个屏幕内的绝对坐标，其中 mPosition[0] 代表X坐标,mPosition[1] 代表Y坐标。
	 */
	private int[] mPosition;
	/**
	 * SeekBar上的Thumb的宽度，即那个托动的小黄点的宽度
	 */
	private final int mThumbWidth = 48;

	public MySeekBar(Context context) {
		this(context, null);
	}

	public MySeekBar(Context context, AttributeSet attrs) {
		super(context, attrs);
		mView = LayoutInflater.from(context).inflate(R.layout.seek_popu, null);
		dialogSeekTime = (TextView) mView.findViewById(R.id.current_progress);
		mPopupWindow = new PopupWindow(mView, mView.getWidth(),
				mView.getHeight(), true);
		mPosition = new int[2];
	}

	/**
	 * 获取控件的宽度
	 * 
	 * @param v
	 * @return 控件的宽度
	 */
	private int getViewWidth(View v) {
		int w = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
		int h = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
		v.measure(w, h);
		return v.getMeasuredWidth();
	}

	/**
	 * 获取控件的高度
	 * 
	 * @param v
	 * @return 控件的高度
	 */
	private int getViewHeight(View v) {
		int w = MeasureSpec.makeMeasureSpec(0,
				MeasureSpec.UNSPECIFIED);
		int h = MeasureSpec.makeMeasureSpec(0,
				MeasureSpec.UNSPECIFIED);
		v.measure(w, h);
		return v.getMeasuredHeight();
	}

	/**
	 * 隐藏进度拖动条的PopupWindow
	 */
	public void hideSeekDialog() {
		if (mPopupWindow != null && mPopupWindow.isShowing()) {
			mPopupWindow.dismiss();
		}
	}

	/**
	 * 显示进度拖动条的PopupWindow
	 * 
	 * @param str
	 *            时间值
	 */
	public void showSeekDialog(String str) {
		dialogSeekTime.setText(str);
		int progress = this.getProgress();
		// 计算每个进度值所占的宽度
		Log.e("aaa", progress + "  this.getWidth()  " + this.getWidth());
		int thumb_x = (int) (progress * (1.0f * (this.getWidth() - 42) / this
				.getMax())); // 22是两边的空白部分宽度
		// 更新后的PopupWindow的Y坐标
		int middle = this.getHeight() / 2 + 120;
		if (mPopupWindow != null) {
			try {
				/*
				 * 获取在整个屏幕内的绝对坐标，注意这个值是要从屏幕顶端算起，也就是包括了通知栏的高度。 其中 mPosition[0]
				 * 代表X坐标,mPosition[1]代表Y坐标。
				 */
				this.getLocationOnScreen(mPosition);
				// 相对某个控件的位置（正左下方），在X、Y方向各有偏移
				mPopupWindow.showAsDropDown(this, (int) mPosition[0],
						mPosition[1]);
				/*
				 * 更新后的PopupWindow的X坐标 首先要把当前坐标值减去PopWindow的宽度的一半，再加上Thumb的宽度一半。
				 * 这样才能使PopWindow的中心点和Thumb的中心点的X坐标相等
				 */
				int x = thumb_x + mPosition[0] - getViewWidth(mView) / 2
						+ mThumbWidth / 2;
				// 更新popup窗口的位置
				mPopupWindow.update(x, middle, getViewWidth(mView),
						getViewHeight(mView));
			} catch (Exception e) {
			}
		}
	}
}